/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.com.cotelasa.scp.entidad;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author WINDOWS 7
 */
@Entity
@Table(name = "compra_nota_credito",catalog = "bdcotelasa", schema = "cotelasa")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "CompraNotaCredito.findAll", query = "SELECT c FROM CompraNotaCredito c"),
    @NamedQuery(name = "CompraNotaCredito.findById", query = "SELECT c FROM CompraNotaCredito c WHERE c.id = :id"),
    @NamedQuery(name = "CompraNotaCredito.findBySerienc", query = "SELECT c FROM CompraNotaCredito c WHERE c.serienc = :serienc"),
    @NamedQuery(name = "CompraNotaCredito.findByNumnc", query = "SELECT c FROM CompraNotaCredito c WHERE c.numnc = :numnc"),
    @NamedQuery(name = "CompraNotaCredito.findByFechanc", query = "SELECT c FROM CompraNotaCredito c WHERE c.fechanc = :fechanc"),
    @NamedQuery(name = "CompraNotaCredito.findByRazon", query = "SELECT c FROM CompraNotaCredito c WHERE c.razon = :razon"),
    @NamedQuery(name = "CompraNotaCredito.findByRuc", query = "SELECT c FROM CompraNotaCredito c WHERE c.ruc = :ruc"),
    @NamedQuery(name = "CompraNotaCredito.findByDireccion", query = "SELECT c FROM CompraNotaCredito c WHERE c.direccion = :direccion"),
    @NamedQuery(name = "CompraNotaCredito.findByValorVenta", query = "SELECT c FROM CompraNotaCredito c WHERE c.valorVenta = :valorVenta"),
    @NamedQuery(name = "CompraNotaCredito.findByIgv", query = "SELECT c FROM CompraNotaCredito c WHERE c.igv = :igv"),
    @NamedQuery(name = "CompraNotaCredito.findByTotal", query = "SELECT c FROM CompraNotaCredito c WHERE c.total = :total"),
    @NamedQuery(name = "CompraNotaCredito.findByTotalletras", query = "SELECT c FROM CompraNotaCredito c WHERE c.totalletras = :totalletras"),
    @NamedQuery(name = "CompraNotaCredito.findByTipocambio", query = "SELECT c FROM CompraNotaCredito c WHERE c.tipocambio = :tipocambio"),
    @NamedQuery(name = "CompraNotaCredito.findByEstado", query = "SELECT c FROM CompraNotaCredito c WHERE c.estado = :estado"),
    @NamedQuery(name = "CompraNotaCredito.findByDocumentoMod", query = "SELECT c FROM CompraNotaCredito c WHERE c.documentoMod = :documentoMod"),
    @NamedQuery(name = "CompraNotaCredito.findByNumeroMod", query = "SELECT c FROM CompraNotaCredito c WHERE c.numeroMod = :numeroMod"),
    @NamedQuery(name = "CompraNotaCredito.findByFechaMod", query = "SELECT c FROM CompraNotaCredito c WHERE c.fechaMod = :fechaMod"),
    @NamedQuery(name = "CompraNotaCredito.findByNombreRecep", query = "SELECT c FROM CompraNotaCredito c WHERE c.nombreRecep = :nombreRecep"),
    @NamedQuery(name = "CompraNotaCredito.findByDniRecep", query = "SELECT c FROM CompraNotaCredito c WHERE c.dniRecep = :dniRecep"),
    @NamedQuery(name = "CompraNotaCredito.findByFechaRecep", query = "SELECT c FROM CompraNotaCredito c WHERE c.fechaRecep = :fechaRecep"),
    @NamedQuery(name = "CompraNotaCredito.findByOtros", query = "SELECT c FROM CompraNotaCredito c WHERE c.otros = :otros"),
    @NamedQuery(name = "CompraNotaCredito.findByMotEmision", query = "SELECT c FROM CompraNotaCredito c WHERE c.motEmision = :motEmision"),
    @NamedQuery(name = "CompraNotaCredito.findByEstadoRegistro", query = "SELECT c FROM CompraNotaCredito c WHERE c.estadoRegistro = :estadoRegistro"),
    @NamedQuery(name = "CompraNotaCredito.findByUsrCreacion", query = "SELECT c FROM CompraNotaCredito c WHERE c.usrCreacion = :usrCreacion"),
    @NamedQuery(name = "CompraNotaCredito.findByFecCreacion", query = "SELECT c FROM CompraNotaCredito c WHERE c.fecCreacion = :fecCreacion"),
    @NamedQuery(name = "CompraNotaCredito.findByUsrModificacion", query = "SELECT c FROM CompraNotaCredito c WHERE c.usrModificacion = :usrModificacion"),
    @NamedQuery(name = "CompraNotaCredito.findByFecModificacion", query = "SELECT c FROM CompraNotaCredito c WHERE c.fecModificacion = :fecModificacion")})
public class CompraNotaCredito implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @SequenceGenerator(name = "generadorCompraNotaCredito", sequenceName = "cotelasa.compra_nota_credito_id_seq")
    @GeneratedValue(generator = "generadorCompraNotaCredito")
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id; 
    
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 10)
    @Column(name = "serienc")
    private String serienc;
    
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 10)
    @Column(name = "numnc")
    private String numnc;
    
    @Basic(optional = false)
    @NotNull
    @Column(name = "fechanc")
    @Temporal(TemporalType.DATE)
    private Date fechanc;
    
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 200)
    @Column(name = "razon")
    private String razon;
    
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 11)
    @Column(name = "ruc")
    private String ruc;
    
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 400)
    @Column(name = "direccion")
    private String direccion;
    
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Column(name = "valor_venta")
    private BigDecimal valorVenta;
    
    @Column(name = "igv")
    private BigDecimal igv;
    
    @Basic(optional = false)
    @NotNull
    @Column(name = "total")
    private BigDecimal total;
    
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 200)
    @Column(name = "totalletras")
    private String totalletras;
    
    @Basic(optional = false)
    @NotNull
    @Column(name = "tipocambio")
    private BigDecimal tipocambio;
    
    @Basic(optional = false)
    @NotNull
    @Column(name = "estado")
    private char estado;
    
    @Size(max = 100)
    @Column(name = "documento_mod")
    private String documentoMod;
    
    @Size(max = 10)
    @Column(name = "numero_mod")
    private String numeroMod;
    
    @Column(name = "fecha_mod")
    @Temporal(TemporalType.DATE)
    private Date fechaMod;
    
    @Size(max = 300)
    @Column(name = "nombre_recep")
    private String nombreRecep;
    
    @Size(max = 10)
    @Column(name = "dni_recep")
    private String dniRecep;
    
    @Column(name = "fecha_recep")
    @Temporal(TemporalType.DATE)
    private Date fechaRecep;
    
    @Size(max = 100)
    @Column(name = "otros")
    private String otros;
    
    @Basic(optional = false)
    @NotNull
    @Column(name = "mot_emision")
    private int motEmision;
    
    @Basic(optional = false)
    @NotNull
    @Column(name = "estado_registro")
    private char estadoRegistro;
    
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 20)
    @Column(name = "usr_creacion")
    private String usrCreacion;
    
    @Basic(optional = false)
    @NotNull
    @Column(name = "fec_creacion")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fecCreacion;
    
    @Size(max = 20)
    @Column(name = "usr_modificacion")
    private String usrModificacion;
    
    @Column(name = "fec_modificacion")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fecModificacion;
    
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idCompraNotaCredito", fetch = FetchType.LAZY)
    private Collection<CompraDetalleNotaCredito> compraDetalleNotaCreditoCollection;
    
    @JoinColumn(name = "moneda", referencedColumnName = "id")
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private TipoMoneda moneda;
    
    @JoinColumn(name = "id_sede", referencedColumnName = "id")
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Sede idSede;
    
    @JoinColumn(name = "id_proveedor", referencedColumnName = "id")
    @ManyToOne(optional = false , fetch = FetchType.LAZY)
    private Proveedor idProveedor;
    
    @JoinColumn(name = "id_orden_pedido", referencedColumnName = "id")
    @ManyToOne(fetch = FetchType.LAZY)
    private OrdenPedido idOrdenPedido;

    public CompraNotaCredito() {
    }

    public CompraNotaCredito(Integer id) {
        this.id = id;
    }

    public CompraNotaCredito(Integer id, String serienc, String numnc, Date fechanc, String razon, String ruc, String direccion, BigDecimal total, String totalletras, BigDecimal tipocambio, char estado, int motEmision, char estadoRegistro, String usrCreacion, Date fecCreacion) {
        this.id = id;
        this.serienc = serienc;
        this.numnc = numnc;
        this.fechanc = fechanc;
        this.razon = razon;
        this.ruc = ruc;
        this.direccion = direccion;
        this.total = total;
        this.totalletras = totalletras;
        this.tipocambio = tipocambio;
        this.estado = estado;
        this.motEmision = motEmision;
        this.estadoRegistro = estadoRegistro;
        this.usrCreacion = usrCreacion;
        this.fecCreacion = fecCreacion;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getSerienc() {
        return serienc;
    }

    public void setSerienc(String serienc) {
        this.serienc = serienc;
    }

    public String getNumnc() {
        return numnc;
    }

    public void setNumnc(String numnc) {
        this.numnc = numnc;
    }

    public Date getFechanc() {
        return fechanc;
    }

    public void setFechanc(Date fechanc) {
        this.fechanc = fechanc;
    }

    public String getRazon() {
        return razon;
    }

    public void setRazon(String razon) {
        this.razon = razon;
    }

    public String getRuc() {
        return ruc;
    }

    public void setRuc(String ruc) {
        this.ruc = ruc;
    }

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public BigDecimal getValorVenta() {
        return valorVenta;
    }

    public void setValorVenta(BigDecimal valorVenta) {
        this.valorVenta = valorVenta;
    }

    public BigDecimal getIgv() {
        return igv;
    }

    public void setIgv(BigDecimal igv) {
        this.igv = igv;
    }

    public BigDecimal getTotal() {
        return total;
    }

    public void setTotal(BigDecimal total) {
        this.total = total;
    }

    public String getTotalletras() {
        return totalletras;
    }

    public void setTotalletras(String totalletras) {
        this.totalletras = totalletras;
    }

    public BigDecimal getTipocambio() {
        return tipocambio;
    }

    public void setTipocambio(BigDecimal tipocambio) {
        this.tipocambio = tipocambio;
    }

    public char getEstado() {
        return estado;
    }

    public void setEstado(char estado) {
        this.estado = estado;
    }

    public String getDocumentoMod() {
        return documentoMod;
    }

    public void setDocumentoMod(String documentoMod) {
        this.documentoMod = documentoMod;
    }

    public String getNumeroMod() {
        return numeroMod;
    }

    public void setNumeroMod(String numeroMod) {
        this.numeroMod = numeroMod;
    }

    public Date getFechaMod() {
        return fechaMod;
    }

    public void setFechaMod(Date fechaMod) {
        this.fechaMod = fechaMod;
    }

    public String getNombreRecep() {
        return nombreRecep;
    }

    public void setNombreRecep(String nombreRecep) {
        this.nombreRecep = nombreRecep;
    }

    public String getDniRecep() {
        return dniRecep;
    }

    public void setDniRecep(String dniRecep) {
        this.dniRecep = dniRecep;
    }

    public Date getFechaRecep() {
        return fechaRecep;
    }

    public void setFechaRecep(Date fechaRecep) {
        this.fechaRecep = fechaRecep;
    }

    public String getOtros() {
        return otros;
    }

    public void setOtros(String otros) {
        this.otros = otros;
    }

    public int getMotEmision() {
        return motEmision;
    }

    public void setMotEmision(int motEmision) {
        this.motEmision = motEmision;
    }

    public char getEstadoRegistro() {
        return estadoRegistro;
    }

    public void setEstadoRegistro(char estadoRegistro) {
        this.estadoRegistro = estadoRegistro;
    }

    public String getUsrCreacion() {
        return usrCreacion;
    }

    public void setUsrCreacion(String usrCreacion) {
        this.usrCreacion = usrCreacion;
    }

    public Date getFecCreacion() {
        return fecCreacion;
    }

    public void setFecCreacion(Date fecCreacion) {
        this.fecCreacion = fecCreacion;
    }

    public String getUsrModificacion() {
        return usrModificacion;
    }

    public void setUsrModificacion(String usrModificacion) {
        this.usrModificacion = usrModificacion;
    }

    public Date getFecModificacion() {
        return fecModificacion;
    }

    public void setFecModificacion(Date fecModificacion) {
        this.fecModificacion = fecModificacion;
    }

    @XmlTransient
    public Collection<CompraDetalleNotaCredito> getCompraDetalleNotaCreditoCollection() {
        return compraDetalleNotaCreditoCollection;
    }

    public void setCompraDetalleNotaCreditoCollection(Collection<CompraDetalleNotaCredito> compraDetalleNotaCreditoCollection) {
        this.compraDetalleNotaCreditoCollection = compraDetalleNotaCreditoCollection;
    }

    public TipoMoneda getMoneda() {
        return moneda;
    }

    public void setMoneda(TipoMoneda moneda) {
        this.moneda = moneda;
    }

    public Sede getIdSede() {
        return idSede;
    }

    public void setIdSede(Sede idSede) {
        this.idSede = idSede;
    }

    public Proveedor getIdProveedor() {
        return idProveedor;
    }

    public void setIdProveedor(Proveedor idProveedor) {
        this.idProveedor = idProveedor;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof CompraNotaCredito)) {
            return false;
        }
        CompraNotaCredito other = (CompraNotaCredito) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "pe.com.cotelasa.scp.entidad.CompraNotaCredito[ id=" + id + " ]";
    }

    public OrdenPedido getIdOrdenPedido() {
        return idOrdenPedido;
    }

    public void setIdOrdenPedido(OrdenPedido idOrdenPedido) {
        this.idOrdenPedido = idOrdenPedido;
    }
    
}
